%{
   #include <string>
   #define YYSTYPE std::string
   #include "parser.h"
   void yyerror(char *s);
   extern YYSTYPE yylval;
%}

%option yylineno
%option noyywrap

%x STR

%%

[\n]		{ return NEWLINE; }

[{]		{ return SBEGIN; }
[}]		{ return SEND; }

[\[]		{ return UNIONBEGIN; }
[\]]		{ return UNIONEND; }

[\\]		{ return SLASH; }

[/][/].*\n      ; // comment

[^\{\}\[\]\n\\]*  { 
			yylval = std::string(yytext);
			return TEXT;
                }

["]             { yylval = ""; BEGIN(STR); }
<STR>[^\\\n"]+  yylval += yytext;
<STR>\\n        yylval += '\n';
<STR>\\["]      yylval += '"';
<STR>\\         { }
<STR>\n         { }
<STR>["]        { BEGIN(INITIAL); return STRING; }

%%

